#ifndef __COMMON_H__
#define __COMMON_H__
#include <mysql/mysql.h>
#include "../../log/systemLog/systemLog.h"
#include "../../config/config.h"

/**
 * @brief 建立并返回一个新的 MySQL 连接。
 *
 * @param conn 新建连接的输出指针
 * @return int 连接结果状态码：成功返回 SYSTEM_ERR_OK；参数错误返回 SYSTEM_ERR_INVALID_ARGUMENT；
 *         初始化失败返回 SYSTEM_ERR_DB_INIT；连接失败返回 SYSTEM_ERR_DB_CONNECT
 */
int db_common_mysql_connect(MYSQL **conn);

// 这个宏只记录错误但不改变控制流
// 检查 db_common_mysql_connect 返回值的宏定义
#define DB_CHECK_MYSQL_CONNECT(ret)                                                                                             \
    do                                                                                                                          \
    {                                                                                                                           \
        system_error_code_t _ret = (ret);                                                                                       \
        if (_ret != SYSTEM_ERR_OK)                                                                                              \
        {                                                                                                                       \
            system_error_code_t _serr = SYSTEM_ERR_DB_BASE;                                                                     \
            if (_ret == SYSTEM_ERR_INVALID_ARGUMENT)                                                                            \
                _serr = SYSTEM_ERR_INVALID_ARGUMENT;                                                                            \
            else if (_ret == SYSTEM_ERR_DB_INIT)                                                                                \
                _serr = SYSTEM_ERR_DB_INIT;                                                                                     \
            else if (_ret == SYSTEM_ERR_DB_CONNECT)                                                                             \
                _serr = SYSTEM_ERR_DB_CONNECT;                                                                                  \
            /* 仅记录主机与用户上下文，避免记录密码 */                                                                          \
            SYSTEM_LOG_ERROR(_serr, "db_common_mysql_connect failed ret=%d host=%s user=%s", _ret, g_mysql_host, g_mysql_user); \
        }                                                                                                                       \
    } while (0)

#endif // __COMMON_H__